package com.biz.primus.ms.payment.channel.allinpay.req;

import com.biz.primus.common.utils.JsonUtils;
import com.biz.primus.ms.payment.channel.allinpay.res.AllInPayCardChangeDataRespVo;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.client.RestTemplate;

import java.util.TreeMap;
import java.util.TreeSet;

/**
 * AllInPayCardChange
 *
 * @author JKLiues
 * @date 2017年11月13日
 */
@Getter
@Setter
@Slf4j
public class AllInPayCardChange extends AllInPayRequestBase {

    private static final String API_URL = "http://116.228.64.55:8080/aop/rest";

    /**
     * ;是	AOP分配给应用的AppKey
     */
    private String app_key;
    /**
     * ;是	API接口名称
     */
    private String method = "allinpay.card.password.change";
    /**
     * ;是	时间戳，格式为yyyyMMddHHmmss，例如：20110125010101。API服务端允许客户端请求时间误差为30分钟。
     */
    private String timestamp;

    /**
     * ;是	API协议版本，可选值:1.0。
     */
    private String v = "1.0";

    /**
     * ;是	签名版本号 1 ,2,3,4,5每次更新后+1递增
     */
    private String sign_v = "1";
    /**
     * ;是	指定响应格式。默认xml,目前支持格式为xml,json
     */
    private String format = "json";
    /**
     * 必须	卡号
     */
    private String card_id;
    /**
     * 必须	当前密码（修改前的密码）,DES加密
     */
    private String password;
    /**
     * 必须	新密码（修改后的密码），DES 加密传输
     */
    private String new_password;
    /**
     * 必须	订单号
     */
    private String order_id;

    public AllInPayCardChangeDataRespVo execute(String sign) {
        TreeMap<String, Object> map = new TreeMap<>();
        map.put("app_key", this.app_key);
        map.put("method", this.method);
        map.put("timestamp", this.timestamp);
        map.put("sign_v", this.sign_v);
        map.put("v", this.v);
        map.put("sign", sign);
        map.put("format", this.format);
        map.put("card_id", this.card_id);
        map.put("password", this.password);
        map.put("new_password", this.new_password);
        map.put("order_id", this.order_id);
        RestTemplate restTemplate = getRestTemplate();
        String finalUrl = buildUrl(getApiUrl(), map);
        String forObject = restTemplate.getForObject(finalUrl, String.class);
        log.info("get car add {}\nresp {}",finalUrl,forObject);
        return JsonUtils.json2Obj(forObject,AllInPayCardChangeDataRespVo.class);
    }

    @Override
    protected String getApiUrl() {
        return API_URL;
    }

    @Override
    public TreeSet<String> getSignParams() {
        return Sets.newTreeSet(Lists.newArrayList(
                "app_key",
                "method",
                "timestamp",
                "v",
                "format",
                "card_id",
                "password",
                "sign_v",
                "new_password",
                "order_id"
        ));
    }
}